const { usersModel } = require("../models/userModel")


const jwt = require('jsonwebtoken');


// 登录
module.exports.login = async function (req, res, next) {
    // 接收前端发送的数据
    const data = req.body;
    const result = await usersModel.find(data);
    // console.log( "前端发送的数据" + data);
    // 验证用户是否登录成功，实际就是在数据集合中查询是否有该用户数据
    // const result = await usersModel.find(data);

    if (result.length) {
        // console.log(result);
        // console.log(result.length);
        //生成 token
        console.log('result[0]',result[0]);
        const token = jwt.sign(
            { _id: result[0]._id }, //保存的用户信息（必须是对象）
            'key', //密钥 ，任意字符串
            { expiresIn: 10 } //token 有效期，纯数字单位默认为s
        )
        res.send({
            message: '登录成功',
            code: 1,
            token: 'Bearer ' + token
        });
    }
    else {
        console.log(result);
        console.log(result.length);
        res.send({
            message: '登录失败',
            code: 0
        });
    }
}

// 注册
module.exports.register = async function (req, res, next) {
    const data = req.body;
    // console.log(data);
    // const dataname = {username:data.username}

    const result = await usersModel.find({ username: data.username });
    console.log(result);
    // console.log(data.username);
    // console.log(result[0].username);
    // console.log(result);
    if (result.length) {

        res.send({
            message: '用户名已存在，请重新输入',
            code: 0
        });

    } else {
        const result1 = await usersModel.create(data);
        if (result1) {
            res.send({
                message: '注册成功',
                code: 1
            });
        } else {
            res.send({
                message: '注册失败',
                code: 0
            });
        }
    }
}

/*通过 token 获取用户信息*/
module.exports.getUserInfo = async function (req, res) {
    // 1. 获取请求头中的 token 字符串
    const tokenBearer = req.get('Authorization');
    // 2. 判断是否成功获取到 token 字符串
    if (tokenBearer) {
        // 3. 将 token 字符串进行拆分,去掉 Bearer 字符串
        const token = tokenBearer.split(' ')[1];
        // 4. 解码 token：拿到 token 中保存的用户信息
        const { _id } = jwt.verify(token, 'key');
        // 5. 判断 token 中是否有 _id
        if (_id) {
            // 6. 通过 _id 查询数据库中的用户信息
            const result = await usersModel.find({ _id });
            res.send({
                code: 1,
                message: '用户信息获取成功',
                result: result[0]
            });
            return;
        }
    }
    // 7. 如果以上判断没有进入 if,则返回失败信息给前端
    res.send({
        code: 0,
        message: '用户信息获取失败'
    })
}